﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.SqlClient;
using GestorDeFlotasDesktop.Classes;

namespace GestorDeFlotasDesktop.AbmCliente
{
    public partial class frmAbmCliente : Form
    {
        private bool alta;
        private int codigoCliente = -1;

        public frmAbmCliente()
        {
            InitializeComponent();
            alta = true;
        }

        public frmAbmCliente(Cliente c)
        {
            InitializeComponent();
            populateFields(c);
            alta = false;
        }

        private void populateFields(Cliente c)
        {
            txtApellido.Text = c.strApellido;
            txtNombre.Text = c.strNombre;
            txtDNI.Text = Convert.ToString(c.intDNI);
            txtMail.Text = c.strMail;
            txtTelefono.Text = Convert.ToString(c.intTelefono);
            txtDireccion.Text = c.strDireccion;
            txtPostal.Text = c.strCodigoPostal;
            dtpNacimiento.Value = c.dtmFechaNacimiento;
            chkHabilitado.Checked = c.blnHabilitado;

            codigoCliente = c.intCodigo;
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            txtApellido.Text = string.Empty;
            txtNombre.Text = string.Empty;
            txtDNI.Text = string.Empty;
            txtMail.Text = string.Empty;
            txtTelefono.Text = string.Empty;
            txtDireccion.Text = string.Empty;
            txtPostal.Text = string.Empty;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private bool camposCompletos()
        {
           if ( txtApellido.Text == string.Empty || txtNombre.Text == string.Empty ||
                txtDNI.Text == string.Empty || txtTelefono.Text == string.Empty ||
                txtDireccion.Text == string.Empty || txtPostal.Text == string.Empty)
               return false;
           else
               return true;
        }

        private bool existeTelefono()
        {
            SqlInterface.Conectar();
            List<SqlParameter> Parameters = new List<SqlParameter>();
            Parameters.Add(new SqlParameter("@telefono", Convert.ToInt32(txtTelefono.Text)));
            SqlDataReader Telefono = SqlInterface.ExecuteReader("SQUIRTLE.spBuscarTelefono", CommandType.StoredProcedure, Parameters);
           
            if (Telefono.HasRows)
            {
                Telefono.Read();
                int telefeno = Telefono.GetInt32(Telefono.GetOrdinal("CLIENTE_TELEFONO"));
                int cliente = Telefono.GetInt32(Telefono.GetOrdinal("CLIENTE_CODIGO"));

                if (alta == false)
                {
                    if (cliente != codigoCliente)
                    {
                        SqlInterface.Desconectar();
                        return true;
                    }
                    else
                    {
                        SqlInterface.Desconectar();
                        return false;
                    }
                }
                SqlInterface.Desconectar();
                return true;
            }
            else
            {
                SqlInterface.Desconectar();
                return false;
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (!camposCompletos())
            {
                MessageBox.Show("Todos los campos deben estar completos. Por favor, llene el formulario antes de continuar.");
                return;
            }

            if (existeTelefono())
            {
                MessageBox.Show("Ya existe un cliente registrado con el teléfeno ingresado. Por favor, ingrese un número diferente.");
                return;
            }

            List<SqlParameter> Parameters = new List<SqlParameter>();
            Parameters.Add(new SqlParameter("@nombreCliente", txtNombre.Text));
            Parameters.Add(new SqlParameter("@apellidoCliente", txtApellido.Text));
            Parameters.Add(new SqlParameter("@dniCliente", Convert.ToInt32(txtDNI.Text)));
            Parameters.Add(new SqlParameter("@mailCliente", txtMail.Text));
            Parameters.Add(new SqlParameter("@direccionCliente", txtDireccion.Text));
            Parameters.Add(new SqlParameter("@cpostal", txtPostal.Text));
            Parameters.Add(new SqlParameter("@telefonoCliente", Convert.ToInt32(txtTelefono.Text)));
            Parameters.Add(new SqlParameter("@fechaNacCliente", dtpNacimiento.Value));

            SqlInterface.Conectar();
            int result;
            if (alta == true)
            {
                result = SqlInterface.ExecuteNonQuery("SQUIRTLE.spAltaCliente", CommandType.StoredProcedure, Parameters);
            }
            else
            {
                Parameters.Add(new SqlParameter("@Habilitado", chkHabilitado.Checked));
                result = SqlInterface.ExecuteNonQuery("SQUIRTLE.spModificacionCliente", CommandType.StoredProcedure, Parameters);
            }

            if (result == -1)
                MessageBox.Show("Ha habido un error en el ingreso del cliente. Verifique los datos e intentelo nuevamente");
            else
                MessageBox.Show("El cliente ha sido guardado con éxito.");

            Parameters.Clear();
            SqlInterface.Desconectar();
            this.Close();
        }

        private void frmAbmCliente_Load(object sender, EventArgs e)
        {

        }
    }
}
